package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;

import java.util.List;
import java.util.Map;

/**
 * @author : zhongchen
 * @date : 2020/2/13 14:02
 */
public interface SystemDao {

    /**
     * 根据权限名查询
     * @param queryString
     * @return
     */
    Page<Permission> findPermissionByCondition(String queryString);

    /**
     * 新建权限
     * @param permission
     */
    void addPermission(Permission permission);

    /**
     * 根据id删除权限信息
     * @param id
     */
    void deletePermission(Integer id);

    /**
     * 根据id查询权限信息
     * @param id
     * @return
     */
    Permission findPermissionById(Integer id);

    /**
     * 编辑权限
     * @param permission
     */
    void editPermission(Permission permission);

    /**
     * 查询所有权限信息
     * @return
     */
    List<Permission> findPermissionAll();


    /**
     * 角色分页查询
     * @param queryString
     * @return
     */
    Page<Role> findRoleByCondition(String queryString);


    /**
     * 新建角色信息
     * @param role
     */
    void addRole(Role role);

    /**
     * 绑定角色和权限关系
     * @param map
     */
    void bindRoleAndPermission(Map map);

    /**
     * 根据角色id查询所有的权限信息
     * @param id
     * @return
     */
    List<Integer> findRelationOnRoleAndPermission(Integer id);

    /**
     * 根据id查询角色信息
     * @param id
     * @return
     */
    Role findRoleById(Integer id);

    /**
     * 编辑角色信息
     * @param role
     */
    void editRole(Role role);

    /**
     * 根据角色id移除角色和权限的关系
     * @param id
     */
    void removeRelationOnRoleAndPermission(Integer id);

    /**
     * 根据id删除角色信息
     * @param id
     */
    void deleteRole(Integer id);

    /**
     * 查询用户信息
     * @param queryString
     * @return
     */
    Page<User> findUserByCondition(String queryString);


    /**
     * 查询所有角色信息
     * @return
     */
    List<Role> findRoleAll();

    /**
     * 添加用户信息
     * @param user
     */
    void addUser(User user);

    /**
     * 绑定用户和角色的关系
     * @param map
     */
    void bindUserAndRole(Map map);

    /**
     * 根据角色id查询所有的角色信息
     * @param id
     * @return
     */
    List<Integer> findRelationOnUserAndRole(Integer id);

    /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    User findUserById(Integer id);

    /**
     * 编辑用户信息
     * @param user
     */
    void editUser(User user);

    /**
     * 根据用户id移除用户和角色关系
     * @param id
     */
    void removeRelationOnUserAndRole(Integer id);

    /**
     * 根据用户id 删除用户信息
     * @param id
     */
    void deleteUser(Integer id);

    /**
     * 根据角色id查询符合条件的用户个数
     * @param id
     * @return
     */
    Integer findUserCountByRoleId(Integer id);

    /**
     * 根据权限id查询符合条件的角色个数
     * @param id
     * @return
     */
    Integer findRoleCountByPermissionId(Integer id);
}
